//app.js


var domain = 'http://a.bm123.top:9201/t1/admin';





App({
  
  globalData:{
    //系统配置
    afterDomain:domain,
    afterInterface:domain+'/interface.php', //后台请求地址
    infoListCachePath:'/infoList',  //城市信息集合本地缓存路径
    cityInfoTimeOut:8640,//0000,   //城市信息本地缓存时效：86400000为一天



    infoList:'',  //信息列表临时容器
    infoTypeList:['全部','房产信息','招聘求职','二手车','旧货交易','失物招领','其它'],
  },
  
  onLaunch: function () {
    var t = this;
    //初始化云环境
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力')
    } else {
      wx.cloud.init({
        // env 参数说明：
        //   env 参数决定接下来小程序发起的云开发调用（wx.cloud.xxx）会默认请求到哪个云环境的资源
        //   此处请填入环境 ID, 环境 ID 可打开云控制台查看
        //   如不填则使用默认环境（第一个创建的环境）
        env: 'cloud1-4gz6jvjcdd370265',
        traceUser: true,
      })
    }

  },

  /*
    ## 保存城市数据集合到本地文件缓存
      示例：
           app.setCityListSetToFile(resGetFileObj,1);
  */
  setCityListSetToFile(resGetFileObj,fun,type){
    var t = this;
    var f = require('./utils/files.js');
    var infoListPath = t.globalData.infoListCachePath;
    f._writes(infoListPath,JSON.stringify(resGetFileObj),function(resW){
      if(type) t.C(resW);
      if(fun) fun();
    })
  },


  /*
    ## 从本地缓存文件获取城市信息集合对象
      成功：返回集合对象
      失败：返回 'err'
      示例：
          app.getCityListSetFromFile(function (resGetFile){
            app.C(resGetFile);
            if(resGetFile != 'err'){

            }
          })
  */
  getCityListSetFromFile(fun){
    var t = this;
    var f = require('./utils/files.js');
    var infoListPath = t.globalData.infoListCachePath;
    //判断信息列表本地缓存在是否存在
    f._has(infoListPath,function(res){
      if(res == 'ok'){    
        //信息列表存在
        f._reads(infoListPath,function(resGetFile){
          if(/^\[.*\]$/.test(resGetFile)){
            var resGetFileObj = JSON.parse(resGetFile);
            if(fun) fun(resGetFileObj);
          }else{
            if(fun) fun('err');
          }
        })
      }else{
        if(fun) fun('err');
      }
    })
  },






  
  getCityCode(){
    if(wx.getStorageSync('cityInfo')){
      return wx.getStorageSync('cityInfo');
    }else{
      wx.redirectTo({
        url: '/pages/index_city/index_city',
      })
    }
  },
  


  /*
      ### 获取openid 
      ### 示例：
          t.getOpenid(function(res){
            t.C(res);
          })
  */
  getOpenid(fun,type){
    var t = this;
    var openid = wx.getStorageSync('openid');
    if(openid){
      if(type) t.C('openid from store');
      if(fun) fun(openid);
    }else{
      t.getOpenidFormYun(function(o){
        if(o == 'err1'){
          t.getOpenidFromAfter(function(o2){
            if(o2.length > 25 && o2.length < 32){
              //后台获取成功
              wx.setStorageSync('openid', o2);
              if(fun) fun(o2);
            }else{
              if(fun) fun('err4');
            }
          },type)
        }else{
          //云函数获取成功
          wx.setStorageSync('openid', o);
          if(fun) fun(o);
        }
      },type)
    }
  },

  getOpenidFormYun(fun,type){
    var t = this;
    wx.cloud.callFunction({
      name: 'getOpenid',
      success: res => {
        if(res.errMsg == 'cloud.callFunction:ok' && res.result.openid.length > 25 && res.result.openid.length < 32 ){
          //云函数获取成功
          if(type) t.C('openid from yun');
          if(fun) fun(res.result.openid);
        }else{
          t.C('openid from yun is bad');
          if(fun) fun('err1');
        }
      }
    })
  },

 
  getOpenidFromAfter(fun,type){
    var t = this
    wx.login({
      success (res) {
        if (res.code) {
          t.Ajax({type:'getOpenid',code:res.code}, function(res2){
            if(res2 && res2.data && res2.data.session_key && res2.data.expires_in && res2.data.openid){
              if(type) t.C('openid from after is ok');
              if(fun) fun(res2.data.openid);
            }else{
              if(type) t.C('openid from after is bad');
              if(fun) fun('err3');
            }
          },t.globalData.afterInterface,'',5000)
        } else {
          if(type) t.C('openid from after code is bad');
          if(fun) fun('err2');
        }
      }
    })
  },



  
  C(e){
    console.log(e)
  },
  
  /*
    ### wx.request 远程获取数据
    参一：object   请求时要传递的参数的json对象
    参二：function 成功的回调，返回服务处理后的数据及信息
    参三：string   要请求的url
    参四：string   请求方法 post 或 get 默认空为get
    参五：int      请求超时，默认 2000 (2秒)  
    示例：
      var url = 'http://a.shop.top/zindex/interface.php';
      t.Ajax({token:token},function(res,x){
        app.C(res);
      },url,'post',3000);
  */
  Ajax(data, fun, url, method, expire) {
    var header_date;
    expire = expire > 0 ? expire : 4000;
    var head_info = ''; //用来保存服务器返回的头信息
    var abort_stat = true;
    if (!method) {
      var task = wx.request({
        url: url,
        method: 'post',
        header: {
          'content-type': 'application/x-www-form-urlencoded'
        },
        data: data,
        success(res) {
          abort_stat = false;
          fun(res, header_date);
        }
      })
    } else {
      var task = wx.request({
        url: url,
        data: data,
        success(res) {
          abort_stat = false;
          fun(res, header_date);
        }
      })
    }
    task.onHeadersReceived(function (task_res) {
      if (task_res.header.Date) {
        header_date = task_res.header.Date;
      }
      if (task_res.header.date) {
        header_date = task_res.header.date;
      }
    });
    var i1 = setTimeout(function () {
      if (abort_stat) {
        task.abort();
        fun('abort');
      }
    }, expire);
  },


  //检测非法字符
  checkChar(strings){
    if(/[%,^,&,|,~,`,\/,\\,<,>]/.test(strings)){
      wx.showToast({
        title: '禁止输入特殊字符！',
        icon:'error'
      })
      return 'err';
    }else{
      return 'ok';
    }
  }



})
